package 富婆梦.第一阶段.Java基础视频学习.线程的练习.作业2;

/**
 * @ProjectName: java-learning
 * @Package: 富婆梦.第一阶段.线程的练习.作业二
 * @ClassName: PrintNum
 * @Author: hemengjin
 * @Description: 三个线程交替打印数字 启动3个线程打印递增的数字,
 * 线程1先打印1,2,3,4,5 然后是线程2打印6,7,8,9,10 然后是线程3打印11,12,13,14,15.
 * 接着再由线程1打印16,17,18,19,20....依次类推, 直到打印到60。
 * <p>
 * 提示：定义一个同步方法，在方法中使用循环的方式输出连续的5个数字，
 * 方法执行前，可以通过标记的方式判断是否是当前线程应该执行，如果是，则执行输出逻辑，
 * 如果不是，则wait进入等待队列，在方法执行结束前，必须使用notifyAll唤醒其他所有线程。
 * @Date:2021/10/25 18:40
 * @Version: 1.0
 */
public class PrintNum implements Runnable {
    //数字
    int num = 0;
    int max = 100;
    //用来标志当前现成本标号的count，使用完打印完一次之后就加一
    int thread_count = 1;

    private void addnum() {
        System.out.println("本次打印的线程是：" + Thread.currentThread().getName());
        for (int i = 0; i < 5; i++) {
            num = num + 1;
            System.out.print(num + ",");
        }
        System.out.println();
        thread_count = thread_count + 1;
        if (thread_count > 3) {
            thread_count = 1;
        }
    }


    @Override
    public void run() {
        while (num < max) {
            if (Integer.parseInt(Thread.currentThread().getName()) == thread_count) {
                addnum();
            }
        }
    }

    public static void main(String[] args) {
        PrintNum printNum = new PrintNum();
        Thread t1 = new Thread(printNum);
        Thread t2 = new Thread(printNum);
        Thread t3 = new Thread(printNum);
        t1.setName("1");
        t2.setName("2");
        t3.setName("3");
        t1.start();
        t2.start();
        t3.start();
        while (printNum.num>printNum.max){
            break;
        }
    }
}
